package co.com.claro.servicio.io;


import co.com.claro.comun.conexiondao.comundao;
import co.com.claro.servicio.od.*;
import org.apache.log4j.Logger;

import java.io.Serializable;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

/**
 * Created by IntelliJ IDEA.
 * User: Manuel Serrano
 * Date: 20/05/2010
 * Time: 02:59:39 PM
 * To change this template use File | Settings | File Templates.
 */
public class CatalogoIo extends comundao implements Serializable {
    private static final Logger logger = Logger.getLogger(CatalogoIo.class);

    /** Constructor de la clase
     */
    public CatalogoIo() {
    }



    public List<OrdenOd> obtenerCatalogosEnFlujo (String transaccionId, OrdenOd o) throws Exception {
        final String origen = "CatalogoIo.obtenerCatalogosEnFlujo";
        Connection connection = null;
        CallableStatement statement = null;
        ResultSet result = null;
        long  time = 0;
        List<OrdenOd> ordenes = null;

        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();

            connection = getConnection();

            statement = connection.prepareCall("BEGIN pkg_inventory_suid.pr_orprodcust(?,?,?); END;");
            statement.setString(1, o.getCodservicio$05());
            statement.registerOutParameter(2, Types.INTEGER);
            statement.registerOutParameter(3, oracle.jdbc.driver.OracleTypes.CURSOR);
            statement.execute();
            result = (ResultSet) statement.getObject(3);

            OrdenOd orden;
            ordenes = new ArrayList<OrdenOd>();

            while(result.next()){
                orden = new OrdenOd();
                orden.setCodcliente(result.getString("CodCliente"));
                orden.setCodclonix(result.getString("CodClOnix"));
                orden.setCodestado(result.getString("CodEstado"));
                orden.setCodproducto(result.getString("CodProducto"));
                orden.setDescripcion(result.getString("Descripcion"));
                orden.setEstado(result.getString("Estado"));
                orden.setFecmodifica(result.getString("FecModifica"));
                orden.setFecregistro(result.getString("FecRegistro"));
                orden.setIdor(result.getString("IdOr"));
                orden.setNomcliente(result.getString("NomCliente"));
                orden.setOt(result.getString("OT"));
                orden.setCodservicio(result.getString("CodServicio"));
                orden.setEstados(obtenerEstados(""));
                orden.setOrdenDetalles(obtenerDetalleOrden("", result.getString("IdOr")));
                ordenes.add(orden);
            }


            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

        return (ordenes);
    }

    private List<OrdenDetalleOd> obtenerDetalleOrden (String transaccionId, String idOrden) throws Exception {
        final String origen = "CatalogoIo.obtenerDetalleOrden";
        Connection connection = null;
        CallableStatement statement = null;
        ResultSet result = null;
        long  time = 0;
        List<OrdenDetalleOd> ordenDetalles = null;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();

            connection = getConnection();

            statement = connection.prepareCall("BEGIN pkg_inventory_suid.pr_ordetalle(?,?,?); END;");
            statement.setString(1, idOrden);
            statement.registerOutParameter(2, Types.INTEGER);
            statement.registerOutParameter(3, oracle.jdbc.driver.OracleTypes.CURSOR);
            statement.execute();
            result = (ResultSet) statement.getObject(3);
            int error = statement.getInt(2);

            ResultSetMetaData rsmd = result.getMetaData();

            int numberOfColumns = rsmd.getColumnCount();

            for (byte i = 1; i <= numberOfColumns; i++) {
                System.out.println(rsmd.getColumnName(i));
            }


            ordenDetalles = new ArrayList<OrdenDetalleOd>();
            OrdenDetalleOd ordenDetalle;


            while(result.next()){
                ordenDetalle = new OrdenDetalleOd();
                ordenDetalle.setCodigoservicio(result.getString("CodigoServicio"));
                ordenDetalle.setCodprod(result.getString("CodProd"));
                ordenDetalle.setDescripcion(result.getString("Descripcion"));
                ordenDetalle.setFecregistro(result.getString("Fec.Registro"));
                ordenDetalle.setGrupo(result.getString("Grupo"));
                ordenDetalle.setIdord(result.getString("IdOrd"));
                ordenDetalle.setIdordet(result.getString("IdOrDet"));
                ordenDetalle.setOt(result.getString("OT"));
                ordenDetalles.add(ordenDetalle);

            }


            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

       return (ordenDetalles);
    }

    private List<EstadoOd> obtenerEstados (String transaccionId) throws Exception {
        final String origen = "CatalogoIo.obtenerEstados";
        Connection connection = null;
        CallableStatement statement = null;
        ResultSet result = null;
        long  time = 0;
        List<EstadoOd> estados = null;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();

            connection = getConnection();

            estados = new ArrayList<EstadoOd>();
            statement = connection.prepareCall("BEGIN pkg_inventory_suid.pr_orstatus(?,?); END; ");
            statement.registerOutParameter(1, Types.INTEGER);
            statement.registerOutParameter(2, oracle.jdbc.driver.OracleTypes.CURSOR);
            statement.execute();
            result = (ResultSet) statement.getObject(2);
            int error = statement.getInt(1);

            EstadoOd estado;
            while(result.next()){
                estado = new EstadoOd();
                estado.setIdestado(result.getString(1));
                estado.setNomestado(result.getString(2));

                estados.add(estado);
            }


            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

        return (estados);
    }

    public List<CatalogosOd> obtenerCatalogos (String transaccionId, UsuarioOd u) throws Exception {
        final String origen = "CatalogoIo.obtenerCatalogos";
        Connection connection = null;
        CallableStatement statement = null;
        ResultSet result = null;
        List l = new ArrayList();
        long  time = 0;
        List<CatalogosOd> catalogos = null;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();

            catalogos=new ArrayList<CatalogosOd>();
            CatalogosOd catalogo;

            catalogo=new CatalogosOd();
            catalogo.setRama("Infraestructura");
            catalogo.setRamoDetalles("Servicios de Comunicaciones");
            catalogo.setServicios("Backend");
            catalogo.setCategoria("no tiene");
            catalogo.setProducto("TELMEX E-BUSINESS SERVICES");
            catalogo.setServicio("SERVICIOS ESPECIALES DATACENTER");
            catalogo.setAlias("Backend");
            catalogos.add(catalogo);

            catalogo=new CatalogosOd();
            catalogo.setRama("Infraestructura");
            catalogo.setRamoDetalles("Servicios de Comunicaciones");
            catalogo.setServicios("Backend IDC");
            catalogo.setCategoria("no tiene");
            catalogo.setProducto("TELMEX E-BUSINESS SERVICES");
            catalogo.setServicio("SERVICIOS ESPECIALES DATACENTER");
            catalogo.setAlias("Backend IDC");
            catalogos.add(catalogo);


            catalogo=new CatalogosOd();
            catalogo.setRama("Infraestructura");
            catalogo.setRamoDetalles("Servicios de Comunicaciones");
            catalogo.setServicios("Balanceo de carga");
            catalogo.setCategoria("no tiene");
            catalogo.setProducto("TELMEX E-BUSINESS SERVICES");
            catalogo.setServicio("SERVICIOS ESPECIALES DATACENTER");
            catalogo.setAlias("Balanceo de carga");
            catalogos.add(catalogo);


            catalogo=new CatalogosOd();
            catalogo.setRama("Infraestructura");
            catalogo.setRamoDetalles("Servicios de Comunicaciones");
            catalogo.setServicios("Canal nivel 2 (lan to lan)");
            catalogo.setCategoria("no tiene");
            catalogo.setProducto("TELMEX E-BUSINESS SERVICES");
            catalogo.setServicio("SERVICIOS ESPECIALES DATACENTER");
            catalogo.setAlias("Canal nivel 2");
            catalogos.add(catalogo);

            catalogo=new CatalogosOd();
            catalogo.setRama("Infraestructura");
            catalogo.setRamoDetalles("Servicios de Comunicaciones");
            catalogo.setServicios("Internet Data Center");
            catalogo.setCategoria("no tiene");
            catalogo.setProducto("TELMEX E-BUSINESS SERVICES");
            catalogo.setServicio("SERVICIOS ESPECIALES DATACENTER");
            catalogo.setAlias("Internet Data Center");
            catalogos.add(catalogo);


            catalogo=new CatalogosOd();
            catalogo.setRama("INFRAESTRUCTURA");
            catalogo.setRamoDetalles("SERVICIOS DE COMUNICACIONES");
            catalogo.setServicios("Internet Punto Central");
            catalogo.setCategoria("no tiene");
            catalogo.setProducto("TELMEX E-BUSINESS SERVICES");
            catalogo.setServicio("SERVICIOS ESPECIALES DATACENTER");
            catalogo.setAlias("Internet Punto Central");
            catalogos.add(catalogo);


            catalogo=new CatalogosOd();
            catalogo.setRama("INFRAESTRUCTURA");
            catalogo.setRamoDetalles("SERVICIOS DE INFRAESTRUCTURA TECNOLOGICA");
            catalogo.setServicios("Almacenamiento");
            catalogo.setCategoria("no tiene");
            catalogo.setProducto("TELMEX EBUSINESS SERVICES");
            catalogo.setServicio("Almacenamiento y Backup / Web Development");
            catalogo.setAlias("No tiene");

            catalogo=new CatalogosOd();
            catalogo.setRama("INFRAESTRUCTURA");
            catalogo.setRamoDetalles("SERVICIOS DE INFRAESTRUCTURA TECNOLOGICA");
            catalogo.setServicios("Colocation");
            catalogo.setCategoria("En documentacion");
            catalogo.setProducto("TELMEX EBUSINESS SERVICES");
            catalogo.setServicio("SERVICIOS ESPECIALES DATACENTER");
            catalogo.setAlias("Colocation");


            catalogo=new CatalogosOd();
            catalogo.setRama("SERVICIOS ADMINISTRADOS");
            catalogo.setRamoDetalles("SERVICIOS ADMINISTRADOS DE SEGURIDAD");
            catalogo.setServicios("Administración Ancho de Banda");
            catalogo.setCategoria("En documentacion");
            catalogo.setProducto("TELMEX SEGURIDAD");
            catalogo.setServicio("ADMON ANCHO DE BANDA TELMEX");
            catalogo.setAlias("No tiene");


            catalogo=new CatalogosOd();
            catalogo.setRama("SERVICIOS ADMINISTRADOS");
            catalogo.setRamoDetalles("SERVICIOS ADMINISTRADOS DE SEGURIDAD");
            catalogo.setServicios("Control de navegación");
            catalogo.setCategoria("En documentacion");
            catalogo.setProducto("TELMEX SEGURIDAD");
            catalogo.setServicio("ADMON ANCHO DE BANDA TELMEX");
            catalogo.setAlias("No tiene");


            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

        return (catalogos);
    }

    public List<ServidorOd> obtenerDetalleServidor (String transaccionId, OrdenDetalleOd oDet) throws Exception {
        final String origen = "CatalogoIo.obtenerDetalleServidor";
        Connection connection = null;
        CallableStatement statement = null;
        ResultSet result = null;
        List l = new ArrayList();
        long  time = 0;
        List<ServidorOd> servidores = null;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();


            connection = getConnection();

            statement = connection.prepareCall("BEGIN pkg_inventory_suid.pr_servidores(?,?,?); END;");
            statement.setString(1, oDet.getIdordet$01());
            statement.registerOutParameter(2, Types.INTEGER);
            statement.registerOutParameter(3, oracle.jdbc.driver.OracleTypes.CURSOR);
            statement.execute();
            result = (ResultSet) statement.getObject(3);

            ResultSetMetaData rsmd = result.getMetaData();

            int numberOfColumns = rsmd.getColumnCount();

            for (byte i = 1; i <= numberOfColumns; i++) {
                System.out.println(rsmd.getColumnName(i));
            }

            servidores = new ArrayList<ServidorOd>();
            ServidorOd servidor;
            while (result.next()){
                servidor = new ServidorOd();
                servidor.setId(result.getString("Id"));
                servidor.setIdordet(result.getString("IdOrDet"));
                servidor.setNombre(result.getString("Nombre Servidor"));
                servidor.setCodsevicio(result.getString("Codigo Sevicio"));
                servidor.setOt(result.getString("OT"));
                servidor.setSo(result.getString("S.O."));
                servidor.setUbicacion(result.getString("UBICACION"));
                servidor.setIpcapa1(result.getString("IpCapa1"));
                servidor.setIpcapa2(result.getString("IpCapa2"));
                servidor.setIpcapa3(result.getString("IpCapa3"));
                servidor.setAmbiente(result.getString("Ambiente"));
                servidor.setRefmarca(result.getString("Ref Marca"));
                servidor.setMonitoreo(result.getString("Monitoreo"));
                servidores.add(servidor);
            }



            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

        return (servidores);
    }

    public List<BaseDatosOd> obtenerDetalleBaseDatos (String transaccionId, OrdenDetalleOd oDet) throws Exception {
        final String origen = "CatalogoIo.obtenerDetalleBaseDatos";
        Connection connection = null;
        CallableStatement statement = null;
        ResultSet result = null;
        List l = new ArrayList();
        long  time = 0;
        List<BaseDatosOd> basesDatos = null;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();


            connection = getConnection();

            statement = connection.prepareCall("BEGIN pkg_inventory_suid.pr_databases(?,?,?); END;");
            statement.setString(1, oDet.getIdordet$01());
            statement.registerOutParameter(2, Types.INTEGER);
            statement.registerOutParameter(3, oracle.jdbc.driver.OracleTypes.CURSOR);
            statement.execute();
            result = (ResultSet) statement.getObject(3);

            ResultSetMetaData rsmd = result.getMetaData();

            int numberOfColumns = rsmd.getColumnCount();

            for (byte i = 1; i <= numberOfColumns; i++) {
                System.out.println(rsmd.getColumnName(i));
            }

            basesDatos = new ArrayList<BaseDatosOd>();
            BaseDatosOd baseDatos;
            while (result.next()){
                baseDatos = new BaseDatosOd();
                baseDatos.setIdbd(result.getString("IDBD"));
                baseDatos.setOriddet(result.getString("ORIDDET"));
                baseDatos.setNombrebd(result.getString("NOMBRE_DB"));
                baseDatos.setInstancia(result.getString("INSTANCIA"));
                baseDatos.setMotorbd(result.getString("MOTORBD"));
                baseDatos.setIdversion(result.getString("IDVERSION"));
                baseDatos.setEdicion(result.getString("EDICION"));
                baseDatos.setAmbiente(result.getString("AMBIENTE"));
                baseDatos.setMonitoreado(result.getString("MONITOREADO"));
                basesDatos.add(baseDatos);
            }



            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

        return (basesDatos);
    }

    public List<MovimientoOd> obtenerMovimientos (String transaccionId, OrdenOd o) throws Exception {
        final String origen = "CatalogoIo.obtenerMovimientos";
        Connection connection = null;
        CallableStatement statement = null;
        ResultSet result = null;
        List l = new ArrayList();
        long  time = 0;
        List<MovimientoOd> movimientos = null;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();

            movimientos = new ArrayList<MovimientoOd>();

            connection = getConnection();


            statement = connection.prepareCall("{ call pkg_inventory_suid.pr_movimientos(?,?,?) }");
            statement.setString(1, o.getIdor$01());
            statement.registerOutParameter(2, Types.INTEGER);
            statement.registerOutParameter(3, oracle.jdbc.driver.OracleTypes.CURSOR);
            statement.execute();
            result = (ResultSet) statement.getObject(3);
            int error = statement.getInt(2);


            ResultSetMetaData rsmd = result.getMetaData();

            int numberOfColumns = rsmd.getColumnCount();

            for (byte i = 1; i <= numberOfColumns; i++) {
                System.out.println(rsmd.getColumnName(i));
            }

            MovimientoOd movimiento;
            while(result.next()){
                movimiento = new MovimientoOd();
                movimiento.setId(result.getString(1));
                movimiento.setIdor(result.getString(2));
                movimiento.setIdestado(result.getString(3));
                movimiento.setEstado(result.getString(4));
                movimiento.setFecmodifica(result.getString(5));
                movimiento.setUsuario(result.getString(6));

                movimientos.add(movimiento);
            }

            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

        return (movimientos);
    }

    public boolean actualizarEstado (String transaccionId, OrdenOd o) throws Exception {
        final String origen = "CatalogoIo.actualizarEstado";
        Connection connection = null;
        CallableStatement statement = null;
        boolean resultado = false;
        long  time = 0;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.ino")+ CatalogoIo.class+" | "+origen);

            time = System.currentTimeMillis ();

            connection = getConnection();
            statement = connection.prepareCall("{ call pkg_inventory_suid.pr_updstatus(?,?,?) }");
            statement.setString(1, o.getIdor$01());
            statement.setString(2, o.getCodestado$10());
            statement.registerOutParameter(3, Types.INTEGER);
            statement.execute();
            int error = statement.getInt(3);

            if(error == 0){
                resultado = true;
            }  else {
                resultado = false;
            }
            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.ino")+ CatalogoIo.class+" | "+origen);


        }
        catch (Exception ex) {
            logger.error(ex);
        }
        finally {
//             closeJdbcObjects (connection, statement, result);
        }

        return (resultado);
    }





}




